package com.nebor.product.domain.service.impl;

import com.alibaba.fastjson.JSON;
import com.nebor.product.domain.bo.ProductCategoryBO;
import com.nebor.product.domain.convert.ProductCategoryBoConverter;
import com.nebor.product.domain.service.ProductCategoryDomainService;
import com.nebor.product.infra.basic.entity.ProductCategory;
import com.nebor.product.infra.basic.service.ProductCategoryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Collections;
import java.util.List;

@Slf4j
@Service
public class ProductCategoryDomainServiceImpl implements ProductCategoryDomainService {

    @Resource
    private ProductCategoryService productCategoryService;

    @Override
    public void add(ProductCategoryBO productCategoryBO) {
        //打log
        if(log.isInfoEnabled()){
            log.info("ProductCategoryDomainServiceImpl.add.bo:{}", JSON.toJSONString(productCategoryBO));
        }
        //转类型 从bo 到 infra
        ProductCategory productCategory = ProductCategoryBoConverter.INSTANCE.convertBoToEntity(productCategoryBO);
        //设置属性（业务层而非用户传递的属性）
        productCategory.setIsDeleted(String.valueOf(0));
        //调下层服务
        productCategoryService.insert(productCategory);
    }

    @Override
    public void delete(ProductCategoryBO productCategoryBO) {
        //打log
        if(log.isInfoEnabled()){
            log.info("ProductCategoryDomainServiceImpl.delete.bo:{}", JSON.toJSONString(productCategoryBO));
        }
        //转类型 从bo 到 infra
        ProductCategory productCategory = ProductCategoryBoConverter.INSTANCE.convertBoToEntity(productCategoryBO);
        //设置属性（业务层而非用户传递的属性）
        productCategory.setIsDeleted(String.valueOf(1));
        //调下层服务
        productCategoryService.update(productCategory);
    }

    @Override
    public void update(ProductCategoryBO productCategoryBO) {
        //打log
        if(log.isInfoEnabled()){
            log.info("ProductCategoryDomainServiceImpl.update.bo:{}", JSON.toJSONString(productCategoryBO));
        }
        //转类型 从bo 到 infra
        ProductCategory productCategory = ProductCategoryBoConverter.INSTANCE.convertBoToEntity(productCategoryBO);
        //设置属性（业务层而非用户传递的属性）

        //调下层服务
        productCategoryService.update(productCategory);
    }

    @Override
    public void query(ProductCategoryBO productCategoryBO) {
        //打log
        if(log.isInfoEnabled()){
            log.info("ProductCategoryDomainServiceImpl.query.bo:{}", JSON.toJSONString(productCategoryBO));
        }
        //转类型 从bo 到 infra
        ProductCategory productCategory = ProductCategoryBoConverter.INSTANCE.convertBoToEntity(productCategoryBO);
        //设置属性（业务层而非用户传递的属性）

        //调下层服务
        productCategoryService.update(productCategory);
    }

    /**
     * 查询一级分类
     * @param productCategoryBO
     * @return
     */
    @Override
    public List<ProductCategoryBO> queryCategory(ProductCategoryBO productCategoryBO) {
        ProductCategory productCategory = ProductCategoryBoConverter.INSTANCE.
                convertBoToEntity(productCategoryBO);
        List<ProductCategory> productCategoryList = productCategoryService.queryCategory(productCategory);
        List<ProductCategoryBO> productCategoryBOList = ProductCategoryBoConverter.INSTANCE.
                convertBoToCategory(productCategoryList);
        if(log.isInfoEnabled()){
            log.info("ProductCategoryDomainServiceImpl.queryCategory.productCategoryBOList:{}",
                    JSON.toJSONString(productCategoryBOList));
        }
//        productCategoryBOList.forEach(bo->{
//            Integer productCount = productCategoryService.queryProductCount(bo.getId());
//            bo.setCount(productCount);
//        });
        return productCategoryBOList;
    }


}
